/**
 * title: w_html-request.js v1.0.0
 * author: Mr.W 
 * time: 2018.12.10
 * describe: 数据请求文档
 */
// 简单封装的基于jq的ajax请求2.0
var wObj_req = (function () {
  // 基础的上传
  function defaultAjax(params) {
    var config = {
      // 请求配置
      baseURL: params.baseURL ? params.baseURL : wObj_req.baseURL,
      url: params.url ? params.url : '',
      data: params.data ? params.data : {},
      type: params.type ? params.type : 'post',

      timeout: params.timeout ? params.timeout : 10000,
      success: params.success ? params.success : function () {
        console.log('No successful callback function！');
      }, // 接口调用成功的回调函数
      error: params.error ? params.error : function () {
        console.log('No failed callback function！');
      }, // 接口调用失败的回调函数
      complete: params.complete ? params.complete : function () {
        // console.log('No completed callback function！');
      }, //接口调用结束的回调函数（调用成功、失败都会执行）
      // 其他配置
      debug: params.debug ? params.debug : false, // 是否开启打印调试
      title: params.title ? params.title : params.url, // 调试显示标题
    }
    $.ajax({
      url: config.baseURL + config.url,
      data: config.data,
      type: config.type,
      timeout: config.timeout,
      success: function (res) {
        if (config.debug) {
          console.log('接口:', config.title, '请求结果:', res);
        }
        config.success(res);
      },
      error: function (err) {
        if (config.debug) {
          console.log('接口:', config.title, '错误结果:', err);
        }
        config.error(err);
      },
      complete: function () {
        config.complete();
      }
    })
  }
  // 文件上传 参数请使用 var formData = new FormData();formData.append("file", wFile);
  function defaultAjax_file(params) {
    var config = {
      // 请求配置
      baseURL: params.baseURL ? params.baseURL : wObj_wReq.baseURL,
      url: params.url ? params.url : '',
      data: params.data ? params.data : {},
      type: params.type ? params.type : 'post',

      timeout: params.timeout ? params.timeout : 10000,
      xhr: params.xhr ? params.xhr : function () { },
      success: params.success ? params.success : function () { },
      error: params.error ? params.error : function () { },
      complete: params.complete ? params.complete : function () { },
      // 其他配置
      debug: params.debug ? params.debug : false, // 是否开启打印调试
      title: params.title ? params.title : params.url, // 调试显示标题
    }
    $.ajax({
      url: config.baseURL + config.url,
      data: config.data,
      type: config.type,
      timeout: config.timeout,
      xhr: function () { //获取ajaxSettings中的xhr对象，为它的upload属性绑定progress事件的处理函数  
        var myXhr = $.ajaxSettings.xhr();
        if (myXhr.upload) { //检查upload属性是否存在  
          //绑定progress事件的回调函数  
          myXhr.upload.addEventListener('progress', function (e) {
            if (e.lengthComputable) {
              let percent = e.loaded / e.total * 100;
              config.xhr(percent, e);
            }
          }, false);

        }
        return myXhr; //xhr对象返回给jQuery使用  
      },
      success: function (res) {
        if (config.debug) {
          console.log('接口:', config.title, '请求结果:', res);
        }
        config.success(res);
      },
      error: function (err) {
        if (config.debug) {
          console.log('接口:', config.title, '错误结果:', err);
        }
        config.error(err);
      },
      complete: function () {
        config.complete();
      },
      contentType: false, //必须false才会自动加上正确的Content-Type  
      processData: false  //必须false才会避开jQuery对 formdata 的默认处理  
    })
  }
  return {
    // 属性
    baseURL: 'http://xxx.xxxxxxx.xxx/', // 请求的 baseURL
    /**
     * w_XXXXX
     * @params obj 对象的属性对应defaultAjax与defaultAjax_file里面的config的属性的值
     * 基础上传使用 defaultAjax
     * 文件上传使用 defaultAjax_file
     */
    // 接口请求使用案例 
    w_XXXXX_txtD: '接口请求使用案例',
    w_XXXXX: function (obj) {
      obj.title ? obj.title : obj.title = 'XXXXX'; // 接口中文描述
      obj.url ? obj.url : obj.url = 'XXXXX'; // 存放接口
      obj.file ? defaultAjax_file(obj) : defaultAjax(obj); // 是否是文件上传
    },
  }
})();